import java.util.*;
import java.io.*;

public class Demo1 {
    public static String funcString(String str1,String str2) {
        char[] arr1 = str1.toCharArray();
        char[] arr2 = str2.toCharArray();

        int len1 = arr1.length;
        int len2 = arr2.length;

        //最长公共子串的长度
        int max = 0;
        //最长公共子串的起始位置
        int sum = 0;
        int[][] array = new int[len1+1][len2+1];

        for(int i = 1; i <= len1; ++i) {
            for(int j = 1; j <= len2; ++j) {
                if(arr1[i-1] == arr2[j-1]) {
                    array[i][j] = array[i-1][j-1] + 1;

                    if(max < array[i][j]) {
                        max = array[i][j];
                        //子串是完整字符串当中的一截,一般是没有整体字符串长,如果在后面找到了最长的子字符串,
                        //就可以用下标减去那个子字符串的长度就可以得到这个子字符串的起始下标
                        //这里的辅助空间+1就是为了让减去以后的数字对应上字符串下标
                        sum = i - max;
                    }
                }
            }
        }

        return str1.substring(sum,sum+max);
    }

    public static void main(String[] args) throws Exception{
        BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
        String str1;
        String str2;
        while((str1 = read.readLine()) != null) {
            str2 = read.readLine();

            if(str1.length() < str2.length()) {
                System.out.println(funcString(str1,str2));
            }else {
                System.out.println(funcString(str2,str1));
            }
        }
    }
}
